package com.rush.springbootinit.utils;

import cn.hutool.core.util.StrUtil;
import cn.hutool.http.Header;
import cn.hutool.http.useragent.UserAgent;
import cn.hutool.http.useragent.UserAgentUtil;
import com.rush.springbootinit.common.ErrorCode;
import com.rush.springbootinit.exception.ThrowUtils;

import javax.servlet.http.HttpServletRequest;

public class DeviceUtils {
    /**
     * 根据请求获取设备信息
     */
    public static String getDeviceInfo(HttpServletRequest request) {
        String userAgent = request.getHeader(Header.USER_AGENT.toString());
        //解析userAgent字符串，获取设备信息
        UserAgent parse = UserAgentUtil.parse(userAgent);
        ThrowUtils.throwIf(parse== null , ErrorCode.PARAMS_ERROR , "userAgent参数为空");
        //默认是pc端
        String device = "pc";
        if (isMiniProgram(userAgent)) {
            //移动端
            device = "mobile";
        }else if (isPad(userAgent)){
            //是否是平板
            device = "pad";
        }else if (isMiniProgram(userAgent)){
            //是否是微信小程序
            device = "miniProgram";
        }
        return device;
    }

    /**
     * 判断是否是小程序
     */
    /**
     * 判断是否是小程序
     * 一般通过 User-Agent 字符串中的 "MicroMessenger" 来判断是否是微信小程序
     **/
    private static boolean isMiniProgram(String userAgentStr) {
        // 判断 User-Agent 是否包含 "MicroMessenger" 表示是微信环境
        return StrUtil.containsIgnoreCase(userAgentStr, "MicroMessenger")
                && StrUtil.containsIgnoreCase(userAgentStr, "MiniProgram");
    }

    /**
     * 判断是否为平板设备
     * 支持 iOS（如 iPad）和 Android 平板的检测
     **/
    private static boolean isPad(String userAgentStr) {
        // 检查 iPad 的 User-Agent 标志
        boolean isIpad = StrUtil.containsIgnoreCase(userAgentStr, "iPad");

        // 检查 Android 平板（包含 "Android" 且不包含 "Mobile"）
        boolean isAndroidTablet = StrUtil.containsIgnoreCase(userAgentStr, "Android")
                && !StrUtil.containsIgnoreCase(userAgentStr, "Mobile");

        // 如果是 iPad 或 Android 平板，则返回 true
        return isIpad || isAndroidTablet;
    }



}
